import axios from 'axios'
import { getUserTempId } from '../tools/uuid'
import store from '@/store'
// 引入进度条插件
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

// 使用axios.create()方法创建一个axios实例
const request = axios.create({
  // 复用的路径(也就是每一个请求都有的路径，这样就不用每一个请求都写这个路径了)
  baseURL: '/api',
  // 请求超时时间，超过这个时间自动中断请求
  timeout: 10000,
  // 设置请求头信息
  headers: {}
})

// 请求拦截器
request.interceptors.request.use(
  // 成功
  (config) => {
    // 开始进度条
    NProgress.start()
    // 设置复用 的公共请求参数
    // store.state.userInfo.token.userInfo指的是哪个模块
    const token = store.state.userInfo.token
    if (token) {
      config.headers.token = token
    } else {
      config.headers.userTempId = getUserTempId()
    }
    return config
  }
)

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    // 结束进度条
    NProgress.done()
    // response就是服务器的响应结果
    // 如果响应状态码是200，说明请求成功
    if (response.data.code === 200) {
      return response.data.data
    } else {
      // 功能失败
      alert(response.data.message)
      return Promise.reject(response.data.message)
    }
  },
  // 请求失败
  (error) => {
    // 结束进度条
    NProgress.done()
    alert(error)
    return Promise.reject(error)
  }
)

export default request
